/**
 * 此文件是用来二次封装axios对象的
 * 还可以统一设置超时时间，及请求头或是响应回来内容
 */

// 1. 引入axios模块
import axios from 'axios'
import 'nprogress/nprogress.css'
import NProgress from 'nprogress'
// import { v4 as uuidv4 } from 'uuid';
import { getUserTempId } from '@/utils/getUserTempId';
import store from '@/store'

const token = store.state.user.userInfo.token
// 2. 创建实例对象
const ajax = axios.create({
  baseURL: 'http://39.98.123.211/',
  timeout: 5000
});
// 3. 设置请求拦截器
ajax.interceptors.request.use(config => {
  // 进度条开始
  NProgress.start()
  // 只要发送请求，就会先走这个请求拦截器
 
  config.headers.userTempId = getUserTempId()

  if (token) {
    config.headers.token = token
  }
  return config
})
// 4. 设置响应拦截器
ajax.interceptors.response.use(response => {
  NProgress.done()
  // 只要服务器响应回来了信息，一定会先走响应拦截器，再走后续的流程
  
  return response.data
}, error => {
  NProgress.done()
  // 如果失败了，此时应该返回一个失败的Promise对象，而不能是其它非Promise对象
  // 如果返回的不是一个真正的失败的Promise对象，后续方法仍然会当成成功来处理
  // console.log('error', error);
  // 按如下来返回一个失败的Promise对象，那么后续的then方法就不会当成成功来处理了
  return Promise.reject(new Error(error.message))
})
// 5. 导出对象
export default ajax